home *** CD-ROM | disk | FTP | other *** search
- property poDotMan, pkMaxDigits, poPrev, poTop, poNext, ploAnswerButtons, poPopUp, poRightQuestions, poWrongQuestions, poOwner, poTestAnswer, poChapterBtnGroup, plQuestionOrder, plAnswerOrder, psChapterQuestions, plRightWrong, piNumQuestions, piNumQuestionsAvailable, piNumChapters, piCurChapter, piCurQuestion, piNumAnswers, piCorrectAnswer, piTotalCorrect, piResponseSprites, plQuestionsAnswerOrder, plFirstAnswer, pzEvalType, pliTestChapters, plpTestQuestions, plTestQuestionOrder, piCurChapterQuestion, piNumTestQuestonsAnswered
- global gsArtCastLib
-
- on new me, xoDotMan, xInfo
- poDotMan = xoDotMan
- mInitVars(me, xInfo)
- if not voidp(getaProp(xInfo, #whichChapter)) then
- piCurChapter = integer(getaProp(xInfo, #whichChapter))
- mHandleTopBtnClick(me, #start_quiz)
- else
- mInitSprites(me)
- end if
- return me
- end
-
- on mInitVars me, xInfo
- piNumQuestions = getaProp(xInfo, #numQuestions)
- piNumQuestionsAvailable = getaProp(xInfo, #numAvailable)
- piNumChapters = getaProp(xInfo, #numChapters)
- pzEvalType = getProp(xInfo, #evalType)
- poOwner = getaProp(xInfo, #owner)
- piNumAnswers = 4
- pkMaxDigits = 2
- pliTestChapters = []
- end
-
- on mInitSprites me
- mResetDots(poDotMan)
- mInitBkg(me, string(pzEvalType) & "BG")
- mInitButtons(me, "start" & string(pzEvalType))
- mSetState(poTop, #gray)
- mDisable(poTop, 1)
- if pzEvalType = #quiz then
- mInitChapterSelectionBtns(me, "Radio")
- else
- mInitChapterSelectionBtns(me, "Toggle")
- mInitNumQuestionsRadio(me)
- end if
- end
-
- on mInitBkg me, xsMember
- viSprite = mGiveDot(poDotMan)
- set the member of sprite viSprite to xsMember
- end
-
- on mInitButtons me, xsMemberTop, xsMemberPrev, xsMemberNext
- viSprite = mGiveDot(poDotMan)
- vzTop = symbol(xsMemberTop)
- if not voidp(xsMemberTop) then
- poTop = InitPopBtn(me, viSprite, xsMemberTop, #mTopBtnClick, vzTop, "clickSnd")
- end if
- if not voidp(xsMemberPrev) then
- viSprite = mGiveDot(poDotMan)
- poPrev = InitPopBtn(me, viSprite, xsMemberPrev, #mPrevBtnClick, VOID, "clickSnd")
- viSprite = mGiveDot(poDotMan)
- poNext = InitPopBtn(me, viSprite, xsMemberNext, #mNextBtnClick, VOID, "clickSnd")
- end if
- end
-
- on mInitChapterSelectionBtns me, vsButtonType
- vsMember = string(pzEvalType) & "Circle"
- poChapterBtnGroup = new(script("BtnGroupWLabelParent"), vsButtonType, vsMember, "chapterSpacer", "chapterLabel", poDotMan, piNumChapters, pkMaxDigits)
- mSetOwner(poChapterBtnGroup, me)
- mSetEvent(poChapterBtnGroup, #chapterSelectionClick)
- end
-
- on mInitNumQuestionsRadio me
- poPopUp = new(script("BtnGroupWLabelParent"), "Radio", "TestCircle", "NumQuestionRadioSpacer", "QuestionLabel", poDotMan, 5, pkMaxDigits)
- mSetOwner(poPopUp, me)
- mSetEvent(poPopUp, #numQuestionsRadioBtn)
- mDisable(poPopUp, 0)
- mDepressABtn(poPopUp, 1)
- end
-
- on mInitReviewQuestionBtns me
- viSprite = mGiveDots(poDotMan, piNumQuestions)
- repeat with i = 1 to piNumQuestions
- vsResult = getAt(plRightWrong, i)
- AlignCenteredSpriteToMember(viSprite + i - 1, "chapSpacer" & IntegerToString(i, pkMaxDigits))
- voQuestionButton = new(script("NotifyOwnerParent"), viSprite + i - 1, vsResult)
- mSetMyOwnerMyEventMyID(voQuestionButton, me, #questionReview, i)
- set the cursor of sprite (viSprite + i - 1) to 280
- add(the scriptInstanceList of sprite (viSprite + i - 1), voQuestionButton)
- end repeat
- end
-
- on mInitReviewScrollText me
- viSprite = mGiveDots(poDotMan, 2)
- if the text of field "testRightScroll" = EMPTY then
- vsWrong = EMPTY
- vsRight = EMPTY
- repeat with i = 1 to piNumQuestions
- vsResult = getAt(plRightWrong, i)
- vsLine = "Question " & string(i) & " - Chapter " & string(getPropAt(plpTestQuestions, i))
- if vsResult = "right" then
- vsRight = vsRight & RETURN & vsLine
- next repeat
- end if
- vsWrong = vsWrong & RETURN & vsLine
- end repeat
- delete line 1 of vsRight
- delete line 1 of vsWrong
- member("testWrongScroll").text = vsWrong
- member("testRightScroll").text = vsRight
- end if
- AlignTextBoxToSpacer(viSprite, "testRightSpacer")
- AlignTextBoxToSpacer(viSprite + 1, "testWrongSpacer")
- set the member of sprite viSprite to "testRightScroll"
- set the member of sprite (viSprite + 1) to "testWrongScroll"
- if voidp(poRightQuestions) then
- poRightQuestions = new(script("listParent"), viSprite, "testRightScroll", me, 1)
- poWrongQuestions = new(script("listParent"), viSprite + 1, "testWrongScroll", me, 2)
- end if
- add(the scriptInstanceList of sprite viSprite, poRightQuestions)
- add(the scriptInstanceList of sprite (viSprite + 1), poWrongQuestions)
- add(the actorList, poRightQuestions)
- add(the actorList, poWrongQuestions)
- mShow(poRightQuestions)
- mShow(poWrongQuestions)
- end
-
- on mInitLetters me
- viSprite = mGiveDots(poDotMan, piNumAnswers)
- if pzEvalType = #quiz then
- ploAnswerButtons = []
- repeat with i = 1 to piNumAnswers
- voAnswerButton = new(script("ToggleBtnParent"), viSprite + i - 1, string(pzEvalType) & IntegerToString(i, pkMaxDigits))
- add(the scriptInstanceList of sprite (viSprite + i - 1), voAnswerButton)
- mSetMyOwnerMyEventMyID(voAnswerButton, me, #answerClick, i)
- append(ploAnswerButtons, voAnswerButton)
- end repeat
- else
- vlbuttons = []
- repeat with i = 1 to piNumAnswers
- vlAbuttonInfo = [#sprite: viSprite + i - 1, #name: string(pzEvalType) & IntegerToString(i, pkMaxDigits), #ID: i]
- add(vlbuttons, vlAbuttonInfo)
- end repeat
- poTestAnswer = new(script("RadioGroupParent"), vlbuttons, #none)
- mSetOwner(poTestAnswer, me)
- mSetEvent(poTestAnswer, #testAnswer)
- mDisable(poTestAnswer, 0)
- end if
- piResponseSprites = mGiveDots(poDotMan, piNumAnswers)
- end
-
- on mInitNumberFields me
- viSprite = mGiveDot(poDotMan)
- set the member of sprite viSprite to "question_num"
- member("question_num").text = string(piCurQuestion)
- AlignTextBoxToSpacer(viSprite, "QuestNumSpacer")
- set the ink of sprite viSprite to 36
- viSprite = mGiveDot(poDotMan)
- member("total_questions").text = string(piNumQuestions)
- set the member of sprite viSprite to "total_questions"
- AlignTextBoxToSpacer(viSprite, "NumQuestSpacer")
- set the ink of sprite viSprite to 36
- if pzEvalType = #quiz then
- viSprite = mGiveDot(poDotMan)
- member("total_correct").text = string(piTotalCorrect)
- set the member of sprite viSprite to "total_correct"
- AlignTextBoxToSpacer(viSprite, "NumCorrectSpacer")
- set the ink of sprite viSprite to 36
- end if
- end
-
- on mInitTextFields me
- vsQuestionData = line getAt(plQuestionOrder, piCurChapterQuestion) of psChapterQuestions
- vsOld = the itemDelimiter
- the itemDelimiter = TAB
- member("questionText").text = item 1 of vsQuestionData
- viSprite = mGiveDot(poDotMan)
- AlignTextBoxToSpacer(viSprite, "questionSpacer")
- set the member of sprite viSprite to "questionText"
- set the ink of sprite viSprite to 36
- viSprite = mGiveDots(poDotMan, piNumAnswers)
- repeat with i = 1 to piNumAnswers
- viNextSprite = viSprite + i - 1
- vsNum = IntegerToString(i, pkMaxDigits)
- member("answerText" & vsNum).text = item getAt(plAnswerOrder, i) + 1 of vsQuestionData
- set the member of sprite viNextSprite to "answerText" & vsNum
- AlignTextBoxToSpacer(viNextSprite, "answerSpacer" & vsNum)
- set the ink of sprite viNextSprite to 36
- end repeat
- viSprite = mGiveDot(poDotMan)
- set the member of sprite viSprite to "fromChapterText"
- AlignTextBoxToSpacer(viSprite, "fromChapterSpacer")
- end
-
- on mSetButtonState me
- if pzEvalType = #test then
- mSetState(poTop, #Up)
- mSetState(poNext, #Up)
- mDisable(poTop, 0)
- mDisable(poNext, 0)
- if piCurQuestion = 1 then
- mSetState(poPrev, #gray)
- mDisable(poPrev, 1)
- else
- mSetState(poPrev, #Up)
- mDisable(poPrev, 0)
- end if
- else
- if (piCurQuestion = 1) and voidp(poOwner) then
- mSetState(poPrev, #gray)
- mSetState(poTop, #gray)
- mSetState(poNext, #gray)
- mDisable(poPrev, 1)
- mDisable(poTop, 1)
- mDisable(poNext, 1)
- else
- mSetState(poPrev, #Up)
- mSetState(poTop, #gray)
- mSetState(poNext, #gray)
- mDisable(poPrev, 0)
- mDisable(poTop, 1)
- mDisable(poNext, 1)
- end if
- end if
- if (piCurQuestion <= count(plFirstAnswer)) and (piCurQuestion < piNumQuestions) then
- mSetState(poNext, #Up)
- mDisable(poNext, 0)
- end if
- end
-
- on mDisable me, xbDisable
- mDisable(poPrev, xbDisable)
- mDisable(poTop, xbDisable)
- mDisable(poNext, xbDisable)
- end
-
- on mHandleNumQuestions me, xiID
- piNumQuestions = xiID
- end
-
- on mHandleChapterSelectionClick me, xiChapter
- piCurChapter = xiChapter
- if mGetState(poTop) = #gray then
- mSetState(poTop, #Up)
- mDisable(poTop, 0)
- end if
- end
-
- on mHandlePrevBtnClick me, xOpcode
- if piCurQuestion = 1 then
- mNotify(poOwner, #mQuizToStage)
- else
- piCurQuestion = piCurQuestion - 1
- plAnswerOrder = getAt(plQuestionsAnswerOrder, piCurQuestion)
- if pzEvalType = #quiz then
- piCurChapterQuestion = piCurQuestion
- mStartNewQuestion(me, piCurQuestion, "ShowAnswer", "back", "next")
- else
- mStartNewTestQuestion(me)
- mStartNewQuestion(me, piCurQuestion, "doneTest", "back", "next")
- end if
- end if
- end
-
- on mInitQuestionData me
- piCurQuestion = 1
- piCurChapterQuestion = 1
- piTotalCorrect = 0
- plRightWrong = []
- plQuestionsAnswerOrder = []
- plFirstAnswer = []
- member("fromChapterText").text = EMPTY
- repeat with i = 1 to piNumQuestions
- append(plRightWrong, EMPTY)
- vlAnswerOrder = GetRandomListFrom1toX(piNumAnswers)
- addAt(plQuestionsAnswerOrder, piCurQuestion, duplicate(vlAnswerOrder))
- end repeat
- plAnswerOrder = getAt(plQuestionsAnswerOrder, 1)
- end
-
- on mHandleTopBtnClick me, xzTop
- case xzTop of
- #startquiz:
- mInitQuestionData(me)
- plQuestionOrder = GetRandomListFrom1toX(piNumQuestionsAvailable)
- psChapterQuestions = member(IntegerToString(piCurChapter, pkMaxDigits)).text
- mStartNewQuestion(me, 1, "ShowAnswer", "back", "next")
- #starttest:
- mInitQuestionData(me)
- piNumTestQuestonsAnswered = 0
- set the text of field "testRightScroll" to EMPTY
- set the text of field "testWrongScroll" to EMPTY
- mSelectTestQuestions(me)
- #showAnswer:
- viWhich = getPos(plAnswerOrder, 1)
- viSprite = viWhich + piResponseSprites - 1
- AlignCenteredSpriteToMember(viSprite, "markSpacer" & IntegerToString(viWhich, pkMaxDigits))
- set the member of sprite viSprite to "right"
- #donetest:
- mDisplaySummary(me)
- #quizSummary, #testSummary:
- mDisplaySummary(me)
- #newQuiz, #newTest:
- pliTestChapters = []
- set the text of field "curChoice" to "20"
- set the text of field "testRightScroll" to EMPTY
- set the text of field "testWrongScroll" to EMPTY
- member("fromChapterText").text = EMPTY
- deleteOne(the actorList, poRightQuestions)
- deleteOne(the actorList, poWrongQuestions)
- mInitSprites(me)
- puppetTransition(3, 2, 2, 1)
- end case
- end
-
- on mSelectTestQuestions me
- pliTestChapters = mGetChosenID(poChapterBtnGroup)
- viNumChapters = count(pliTestChapters)
- if (viNumChapters * piNumQuestionsAvailable) < piNumQuestions then
- alert("You have choosen to many questions for the number of chapters selected.")
- else
- viQuestionsPerChapter = integer(piNumQuestions / viNumChapters)
- viRemainder = piNumQuestions - (viQuestionsPerChapter * viNumChapters)
- plQuestionOrder = GetRandomListFrom1toX(piNumQuestionsAvailable)
- plTestQuestionOrder = GetRandomListFrom1toX(piNumQuestions)
- plpTestQuestions = [:]
- repeat with viChapter in pliTestChapters
- if getPos(pliTestChapters, viChapter) <= viRemainder then
- viNumQuestions = viQuestionsPerChapter + 1
- else
- viNumQuestions = viQuestionsPerChapter
- end if
- repeat with i = 1 to viNumQuestions
- addProp(plpTestQuestions, viChapter, i)
- end repeat
- end repeat
- mStartNewTestQuestion(me)
- mStartNewQuestion(me, piCurQuestion, "doneTest", "back", "next")
- end if
- end
-
- on mHandleNextBtnClick me, xOpcode
- if piCurQuestion < piNumQuestions then
- piCurQuestion = piCurQuestion + 1
- plAnswerOrder = getAt(plQuestionsAnswerOrder, piCurQuestion)
- if pzEvalType = #quiz then
- piCurChapterQuestion = piCurQuestion
- mStartNewQuestion(me, piCurQuestion, "ShowAnswer", "back", "next")
- else
- mStartNewTestQuestion(me)
- mStartNewQuestion(me, piCurQuestion, "doneTest", "back", "next")
- end if
- else
- if voidp(poOwner) then
- mDisplaySummary(me)
- end if
- end if
- end
-
- on mStartNewTestQuestion me
- piCurChapter = getPropAt(plpTestQuestions, getAt(plTestQuestionOrder, piCurQuestion))
- piCurChapterQuestion = getAt(plpTestQuestions, getAt(plTestQuestionOrder, piCurQuestion))
- psChapterQuestions = member(IntegerToString(piCurChapter, pkMaxDigits)).text
- end
-
- on mStartNewQuestion me, xiNextQuestion, xsTop, xsPrev, xsNext
- mResetDots(poDotMan)
- mInitBkg(me, string(pzEvalType) & "QuestBg")
- mInitButtons(me, xsTop, xsPrev, xsNext)
- mSetButtonState(me)
- mInitNumberFields(me)
- mInitTextFields(me)
- mInitLetters(me)
- if pzEvalType = #quiz then
- if count(plFirstAnswer) >= piCurQuestion then
- viWhich = getAt(plFirstAnswer, piCurQuestion)
- AlignCenteredSpriteToMember(piResponseSprites + viWhich - 1, "markspacer" & IntegerToString(viWhich, pkMaxDigits))
- set the member of sprite (piResponseSprites + viWhich - 1) to getAt(plRightWrong, piCurQuestion)
- mSetState(getAt(ploAnswerButtons, viWhich), #down)
- mDisable(getAt(ploAnswerButtons, viWhich), 1)
- end if
- else
- if count(plFirstAnswer) >= piCurQuestion then
- viWhich = getAt(plFirstAnswer, piCurQuestion)
- if viWhich then
- mDepressABtn(poTestAnswer, viWhich)
- end if
- end if
- end if
- end
-
- on mReviewAQuestion me, xiNextQuestion
- piCurQuestion = xiNextQuestion
- if pzEvalType = #quiz then
- piCurChapterQuestion = piCurQuestion
- else
- mStartNewTestQuestion(me)
- end if
- plAnswerOrder = getAt(plQuestionsAnswerOrder, piCurQuestion)
- mStartNewQuestion(me, xiNextQuestion, string(pzEvalType) & "summary")
- if pzEvalType = #test then
- member("fromChapterText").text = "Chapter " & getPropAt(plpTestQuestions, piCurQuestion)
- mDisable(poTestAnswer, 1)
- if count(plFirstAnswer) >= piCurQuestion then
- viWhich = getAt(plFirstAnswer, piCurQuestion)
- AlignCenteredSpriteToMember(piResponseSprites + viWhich - 1, "markSpacer" & IntegerToString(viWhich, pkMaxDigits))
- set the member of sprite (piResponseSprites + viWhich - 1) to getAt(plRightWrong, piCurQuestion)
- end if
- else
- repeat with i = 1 to piNumAnswers
- mDisable(getAt(ploAnswerButtons, i), 1)
- end repeat
- end if
- if voidp(poOwner) then
- mSetState(poTop, #Up)
- mDisable(poTop, 0)
- end if
- mHandleTopBtnClick(me, #showAnswer)
- end
-
- on mDisplaySummary me
- mResetDots(poDotMan)
- mInitBkg(me, string(pzEvalType) & "SummaryBG")
- mInitButtons(me)
- if pzEvalType = #quiz then
- mInitReviewQuestionBtns(me)
- else
- mInitReviewScrollText(me)
- end if
- viSprite = mGiveDot(poDotMan)
- member("total_correct").text = string(piTotalCorrect)
- set the member of sprite viSprite to "total_correct"
- AlignTextBoxToSpacer(viSprite, "summaryNumCorrectSpacer")
- set the ink of sprite viSprite to 36
- viSprite = mGiveDot(poDotMan)
- if pzEvalType = #quiz then
- member("total_correct_percentage").text = string(integer(100 * piTotalCorrect / piNumQuestions))
- else
- member("total_correct_percentage").text = string(integer(100 * piTotalCorrect / piNumQuestions))
- end if
- set the member of sprite viSprite to "total_correct_percentage"
- AlignTextBoxToSpacer(viSprite, "summaryScoreSpacer")
- set the ink of sprite viSprite to 36
- end
-
- on mHandleAnswerClick me, xiID
- if (piCurQuestion = piNumQuestions) and not voidp(poOwner) then
- mSetState(poNext, #gray)
- mDisable(poNext, 1)
- mNotify(poOwner, #mDoneQuiz)
- else
- mSetState(poNext, #Up)
- mDisable(poNext, 0)
- end if
- mSetState(poTop, #Up)
- mDisable(poTop, 0)
- mDisable(getAt(ploAnswerButtons, xiID), 1)
- if getAt(plAnswerOrder, xiID) = 1 then
- vsMember = "right"
- puppetSound("legalDrag.snd")
- viChange = 1
- else
- vsMember = "wrong"
- puppetSound("illegalDrag.snd")
- viChange = 0
- end if
- AlignCenteredSpriteToMember(piResponseSprites + xiID - 1, "markspacer" & IntegerToString(xiID, pkMaxDigits))
- set the member of sprite (piResponseSprites + xiID - 1) to vsMember
- if getAt(plRightWrong, piCurQuestion) = EMPTY then
- setAt(plFirstAnswer, piCurQuestion, xiID)
- setAt(plRightWrong, piCurQuestion, vsMember)
- piTotalCorrect = piTotalCorrect + viChange
- member("total_correct").text = string(piTotalCorrect)
- end if
- end
-
- on mHandleTestAnswerClick me, xiID
- puppetSound("clickSnd")
- if getAt(plAnswerOrder, xiID) = 1 then
- vsMember = "right"
- viChange = 1
- else
- vsMember = "wrong"
- viChange = 0
- end if
- if getAt(plRightWrong, piCurQuestion) = EMPTY then
- piNumTestQuestonsAnswered = piNumTestQuestonsAnswered + 1
- end if
- if getAt(plRightWrong, piCurQuestion) = "right" then
- if viChange = 0 then
- piTotalCorrect = piTotalCorrect - 1
- end if
- else
- piTotalCorrect = piTotalCorrect + viChange
- end if
- setAt(plFirstAnswer, piCurQuestion, xiID)
- setAt(plRightWrong, piCurQuestion, vsMember)
- end
-
- on mHandleQuestionReview me, xiQuestion
- mReviewAQuestion(me, xiQuestion)
- end
-
- on mHandleScrollingList me, xiID
- if xiID = 1 then
- vsLine = mGetLine(poRightQuestions)
- else
- vsLine = mGetLine(poWrongQuestions)
- end if
- vsNum = char offset(" ", vsLine) + 1 to offset("-", vsLine) - 2 of vsLine
- mHide(poRightQuestions)
- mHide(poWrongQuestions)
- mReviewAQuestion(me, integer(vsNum))
- deleteOne(the actorList, poRightQuestions)
- deleteOne(the actorList, poWrongQuestions)
- end
-
- on mNotify me, xiEvent, xOpcode
- case xiEvent of
- #mPrevBtnClick:
- mHandlePrevBtnClick(me, xOpcode)
- #mTopBtnClick:
- mHandleTopBtnClick(me, xOpcode)
- #mNextBtnClick:
- mHandleNextBtnClick(me, xOpcode)
- #chapterSelectionClick:
- mHandleChapterSelectionClick(me, xOpcode)
- #answerClick:
- mHandleAnswerClick(me, xOpcode)
- #testAnswer:
- mHandleTestAnswerClick(me, xOpcode)
- #questionReview:
- mHandleQuestionReview(me, xOpcode)
- #numQuestionsRadioBtn:
- mHandleNumQuestions(me, xOpcode)
- #scrollingList:
- mHandleScrollingList(me, xOpcode)
- end case
- end
-
- on cleanUp me
- plQuestionOrder = []
- plAnswerOrder = []
- plRightWrong = []
- ploAnswerButtons = []
- plQuestionsAnswerOrder = []
- plFirstAnswer = []
- ploTestChapterButtons = []
- pliTestChapters = []
- poPopUp = VOID
- plpTestQuestions = []
- plTestQuestionOrder = []
- poRightQuestions = VOID
- poWrongQuestions = VOID
- end
-